﻿using System;
using System.Text;
using System.Data;
using Gencode.Common.SQL;

namespace Gencode.PrsCommon.Data.Anstellung
{
    public class AnstellungData
	{
		/// <summary>
		/// Creates a DataView with all Anstellungen. [anstellungid,name,prioritaet,einsatzprotag,gerechnet,ausgelernt]
		/// </summary>
		/// <param name="mandid"></param>
		/// <returns>anstellungid,name,prioritaet,einsatzprotag,gerechnet,ausgelernt </returns>
		public static DataView GetAnstellungen(string mandid)
		{
			Querry query = new Querry();
			query.SetSTPName("get_anstellung");
			query.AddParameter("@mandid", mandid);

			return query.ExecuteForDataView();
		}

		/// <summary>
		/// Creates a DataView with all Anstellungen. anstellungid,name,prioritaet,einsatzprotag,gerechnet 
		/// </summary>
		/// <param name="mandid"></param>
		/// <param name="addEmptyRow"></param>
		/// <returns>anstellungid,name,prioritaet,einsatzprotag,gerechnet </returns>
		public static DataView GetAnstellungen(string mandid, bool addEmptyRow)
		{
			DataView dv = GetAnstellungen(mandid);

			if (addEmptyRow)
			{
				DataRow row = dv.Table.NewRow();
				dv.Table.Rows.InsertAt(row, 0);
			}

			return dv;
		}

		public static string GetName(int anstellungid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select Name from Anstellung where AnstellungID = " + anstellungid);

			if (dv != null && dv.Count > 0)
				return dv[0].Row[0].ToString();

			return string.Empty;
		}

		public static string GetLangtext(int anstellungid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select Langtext from Anstellung a inner join Beschreibung b on a.BeschrID = b.BeschrID where AnstellungID = " + anstellungid);

			if (dv != null && dv.Count > 0)
				return dv[0].Row[0].ToString();

			return string.Empty;
		}
		

	    public static int GetPrioritaet(int anstellungid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select Prioritaet from Anstellung where AnstellungID = " + anstellungid);

			if (dv != null && dv.Count > 0)
				return int.Parse(dv[0].Row[0].ToString());

			return 0;
		}

		public static int GetEinsatzProTag(int anstellungid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select EinsatzProTag from Anstellung where AnstellungID = " + anstellungid);

			if (dv != null && dv.Count > 0)
				return int.Parse(dv[0].Row[0].ToString());

			return 0;
		}
		
		public static bool GetGerechnet(int anstellungid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select Gerechnet from Anstellung where AnstellungID = " + anstellungid);

			if (dv != null && dv.Count > 0)
			{
				if (int.Parse(dv[0].Row[0].ToString()) == 1)
					return true;
			}

			return false;
		}

		public static bool CheckIfNameExists(string name)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select * from Anstellungen where Name = " + name);
			if (dv != null && dv.Count > 0)
				return true;

			return false;
		}

		public static void SaveNewAnstellung(string name, string beschreibung, int prioritaet, int anzahleinsatze, bool imsaldorechnen, string mandid, bool ausgelernt)
		{
			int rechnen = 0;
			if (imsaldorechnen)
				rechnen = 1;

			Querry stp = new Querry();

			stp.SetSTPName("set_anstellung");

			stp.AddParameter("@mandid", mandid);
			stp.AddParameter("@anstellungname", name);
			stp.AddParameter("@kurztext", name);
			stp.AddParameter("@beschreibung", beschreibung);
			stp.AddParameter("@prio", prioritaet);
			stp.AddParameter("@EinsatzProTag", anzahleinsatze);
			stp.AddParameter("@gerechnet", rechnen);
			if (ausgelernt)
				stp.AddParameter("@ausgelernt", 1);
			else
				stp.AddParameter("@ausgelernt", 0);

			stp.Execute(true);
		}

		public static void UpdateAnstellung(int anstellungid, string name, string beschreibung, int prioritaet, int anzahleinsatze, bool imsaldorechnen, bool ausgelernt)
		{
			int rechnen = 0;
			if (imsaldorechnen)
				rechnen = 1;

			Querry stp = new Querry();
			// TODO: NICHT MIT BESCHRID SONDERN MIT EIGENER ID
			stp.SetSTPName("upd_anstellung");

			stp.AddParameter("@anstellungid", anstellungid);
			stp.AddParameter("@anstellungname", name);
			stp.AddParameter("@beschreibung", beschreibung);
			stp.AddParameter("@prio", prioritaet);
			stp.AddParameter("@EinsatzProTag", anzahleinsatze);
			stp.AddParameter("@gerechnet", rechnen);
			if (ausgelernt)
				stp.AddParameter("@ausgelernt", 1);
			else
				stp.AddParameter("@ausgelernt", 0);

			stp.Execute(true);
		}

		/// <summary>
		/// Fills the given Combobox with all Anstellungen
		/// </summary>
		/// <param name="combo">Reference of the Combobox to be filled</param>
		/// <returns>The DataView of the Combobox</returns>
		public static DataView GetAnstellungenNamen(string mandid)
		{
			DataView dv = SimpleQuerry.ExecuteForDataView("select AnstellungID, Name from Anstellung where mandid = '" + mandid + "' order by Prioritaet");

			if (dv != null && dv.Count > 0)
				return dv;

			return new DataView();
		}
	}
}
